home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / beans / MetaData.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  9.2 KB  |  259 lines

  1. package java.beans;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Proxy;
  5. import java.util.Hashtable;
  6. import java.util.Vector;
  7.  
  8. class MetaData {
  9.    private static Hashtable internalPersistenceDelegates = new Hashtable();
  10.    private static Hashtable transientProperties = new Hashtable();
  11.    private static PersistenceDelegate nullPersistenceDelegate = new NullPersistenceDelegate();
  12.    private static PersistenceDelegate enumPersistenceDelegate = new EnumPersistenceDelegate();
  13.    private static PersistenceDelegate primitivePersistenceDelegate = new PrimitivePersistenceDelegate();
  14.    private static PersistenceDelegate defaultPersistenceDelegate = new DefaultPersistenceDelegate();
  15.    private static PersistenceDelegate arrayPersistenceDelegate;
  16.    private static PersistenceDelegate proxyPersistenceDelegate;
  17.  
  18.    static boolean equals(Object var0, Object var1) {
  19.       return var0 == null ? var1 == null : var0.equals(var1);
  20.    }
  21.  
  22.    public static synchronized void setPersistenceDelegate(Class var0, PersistenceDelegate var1) {
  23.       setBeanAttribute(var0, "persistenceDelegate", var1);
  24.    }
  25.  
  26.    public static synchronized PersistenceDelegate getPersistenceDelegate(Class var0) {
  27.       if (var0 == null) {
  28.          return nullPersistenceDelegate;
  29.       } else if (Enum.class.isAssignableFrom(var0)) {
  30.          return enumPersistenceDelegate;
  31.       } else if (ReflectionUtils.isPrimitive(var0)) {
  32.          return primitivePersistenceDelegate;
  33.       } else if (var0.isArray()) {
  34.          if (arrayPersistenceDelegate == null) {
  35.             arrayPersistenceDelegate = new ArrayPersistenceDelegate();
  36.          }
  37.  
  38.          return arrayPersistenceDelegate;
  39.       } else {
  40.          try {
  41.             if (Proxy.isProxyClass(var0)) {
  42.                if (proxyPersistenceDelegate == null) {
  43.                   proxyPersistenceDelegate = new ProxyPersistenceDelegate();
  44.                }
  45.  
  46.                return proxyPersistenceDelegate;
  47.             }
  48.          } catch (Exception var5) {
  49.          }
  50.  
  51.          String var1 = var0.getName();
  52.          if (getBeanAttribute(var0, "transient_init") == null) {
  53.             Vector var2 = (Vector)transientProperties.get(var1);
  54.             if (var2 != null) {
  55.                for(int var3 = 0; var3 < var2.size(); ++var3) {
  56.                   setPropertyAttribute(var0, (String)var2.get(var3), "transient", Boolean.TRUE);
  57.                }
  58.             }
  59.  
  60.             setBeanAttribute(var0, "transient_init", Boolean.TRUE);
  61.          }
  62.  
  63.          Object var8 = (PersistenceDelegate)getBeanAttribute(var0, "persistenceDelegate");
  64.          if (var8 == null) {
  65.             var8 = (PersistenceDelegate)internalPersistenceDelegates.get(var1);
  66.             if (var8 != null) {
  67.                return (PersistenceDelegate)var8;
  68.             }
  69.  
  70.             internalPersistenceDelegates.put(var1, defaultPersistenceDelegate);
  71.  
  72.             try {
  73.                String var9 = var0.getName();
  74.                Class var10 = Class.forName("java.beans." + var9.replace('.', '_') + "_PersistenceDelegate");
  75.                var8 = (PersistenceDelegate)var10.newInstance();
  76.                internalPersistenceDelegates.put(var1, var8);
  77.             } catch (ClassNotFoundException var6) {
  78.                String[] var4 = getConstructorProperties(var0);
  79.                if (var4 != null) {
  80.                   var8 = new DefaultPersistenceDelegate(var4);
  81.                   internalPersistenceDelegates.put(var1, var8);
  82.                }
  83.             } catch (Exception var7) {
  84.                System.err.println("Internal error: " + var7);
  85.             }
  86.          }
  87.  
  88.          return (PersistenceDelegate)(var8 != null ? var8 : defaultPersistenceDelegate);
  89.       }
  90.    }
  91.  
  92.    private static String[] getConstructorProperties(Class var0) {
  93.       String[] var1 = null;
  94.       int var2 = 0;
  95.  
  96.       for(Constructor var6 : var0.getConstructors()) {
  97.          String[] var7 = getAnnotationValue(var6);
  98.          if (var7 != null && var2 < var7.length && isValid(var6, var7)) {
  99.             var1 = var7;
  100.             var2 = var7.length;
  101.          }
  102.       }
  103.  
  104.       return var1;
  105.    }
  106.  
  107.    private static String[] getAnnotationValue(Constructor var0) {
  108.       ConstructorProperties var1 = (ConstructorProperties)var0.getAnnotation(ConstructorProperties.class);
  109.       return var1 != null ? var1.value() : null;
  110.    }
  111.  
  112.    private static boolean isValid(Constructor var0, String[] var1) {
  113.       Class[] var2 = var0.getParameterTypes();
  114.       if (var1.length != var2.length) {
  115.          return false;
  116.       } else {
  117.          for(String var6 : var1) {
  118.             if (var6 == null) {
  119.                return false;
  120.             }
  121.          }
  122.  
  123.          return true;
  124.       }
  125.    }
  126.  
  127.    public static BeanInfo getBeanInfo(Class var0) {
  128.       BeanInfo var1 = null;
  129.  
  130.       try {
  131.          var1 = Introspector.getBeanInfo(var0);
  132.       } catch (Throwable var3) {
  133.          var3.printStackTrace();
  134.       }
  135.  
  136.       return var1;
  137.    }
  138.  
  139.    private static PropertyDescriptor getPropertyDescriptor(Class var0, String var1) {
  140.       BeanInfo var2 = getBeanInfo(var0);
  141.       PropertyDescriptor[] var3 = var2.getPropertyDescriptors();
  142.  
  143.       for(int var4 = 0; var4 < var3.length; ++var4) {
  144.          PropertyDescriptor var5 = var3[var4];
  145.          if (var1.equals(var5.getName())) {
  146.             return var5;
  147.          }
  148.       }
  149.  
  150.       return null;
  151.    }
  152.  
  153.    private static void setPropertyAttribute(Class var0, String var1, String var2, Object var3) {
  154.       PropertyDescriptor var4 = getPropertyDescriptor(var0, var1);
  155.       if (var4 == null) {
  156.          System.err.println("Warning: property " + var1 + " is not defined on " + var0);
  157.       } else {
  158.          var4.setValue(var2, var3);
  159.       }
  160.    }
  161.  
  162.    private static void setBeanAttribute(Class var0, String var1, Object var2) {
  163.       getBeanInfo(var0).getBeanDescriptor().setValue(var1, var2);
  164.    }
  165.  
  166.    private static Object getBeanAttribute(Class var0, String var1) {
  167.       return getBeanInfo(var0).getBeanDescriptor().getValue(var1);
  168.    }
  169.  
  170.    private static synchronized void registerConstructor(String var0, String[] var1) {
  171.       internalPersistenceDelegates.put(var0, new DefaultPersistenceDelegate(var1));
  172.    }
  173.  
  174.    private static void removeProperty(String var0, String var1) {
  175.       Vector var2 = (Vector)transientProperties.get(var0);
  176.       if (var2 == null) {
  177.          var2 = new Vector();
  178.          transientProperties.put(var0, var2);
  179.       }
  180.  
  181.       var2.add(var1);
  182.    }
  183.  
  184.    static {
  185.       registerConstructor("java.util.Date", new String[]{"time"});
  186.       registerConstructor("java.beans.Statement", new String[]{"target", "methodName", "arguments"});
  187.       registerConstructor("java.beans.Expression", new String[]{"target", "methodName", "arguments"});
  188.       registerConstructor("java.beans.EventHandler", new String[]{"target", "action", "eventPropertyName", "listenerMethodName"});
  189.       registerConstructor("java.awt.Color", new String[]{"red", "green", "blue", "alpha"});
  190.       registerConstructor("java.awt.Font", new String[]{"name", "style", "size"});
  191.       registerConstructor("java.awt.Cursor", new String[]{"type"});
  192.       registerConstructor("java.awt.ScrollPane", new String[]{"scrollbarDisplayPolicy"});
  193.       registerConstructor("javax.swing.plaf.FontUIResource", new String[]{"name", "style", "size"});
  194.       registerConstructor("javax.swing.plaf.ColorUIResource", new String[]{"red", "green", "blue"});
  195.       registerConstructor("javax.swing.tree.DefaultTreeModel", new String[]{"root"});
  196.       registerConstructor("javax.swing.JTree", new String[]{"model"});
  197.       registerConstructor("javax.swing.tree.TreePath", new String[]{"path"});
  198.       registerConstructor("javax.swing.OverlayLayout", new String[]{"target"});
  199.       registerConstructor("javax.swing.BoxLayout", new String[]{"target", "axis"});
  200.       registerConstructor("javax.swing.Box$Filler", new String[]{"minimumSize", "preferredSize", "maximumSize"});
  201.       registerConstructor("javax.swing.DefaultCellEditor", new String[]{"component"});
  202.       registerConstructor("javax.swing.JSplitPane", new String[]{"orientation"});
  203.       registerConstructor("javax.swing.ImageIcon", new String[]{"description"});
  204.       registerConstructor("javax.swing.JButton", new String[]{"text"});
  205.       registerConstructor("javax.swing.border.BevelBorder", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
  206.       registerConstructor("javax.swing.plaf.BorderUIResource$BevelBorderUIResource", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
  207.       registerConstructor("javax.swing.border.CompoundBorder", new String[]{"outsideBorder", "insideBorder"});
  208.       registerConstructor("javax.swing.plaf.BorderUIResource$CompoundBorderUIResource", new String[]{"outsideBorder", "insideBorder"});
  209.       registerConstructor("javax.swing.border.EmptyBorder", new String[]{"borderInsets"});
  210.       registerConstructor("javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", new String[]{"borderInsets"});
  211.       registerConstructor("javax.swing.border.EtchedBorder", new String[]{"etchType", "highlightColor", "shadowColor"});
  212.       registerConstructor("javax.swing.plaf.BorderUIResource$EtchedBorderUIResource", new String[]{"etchType", "highlightColor", "shadowColor"});
  213.       registerConstructor("javax.swing.border.LineBorder", new String[]{"lineColor", "thickness"});
  214.       registerConstructor("javax.swing.plaf.BorderUIResource$LineBorderUIResource", new String[]{"lineColor", "thickness"});
  215.       registerConstructor("javax.swing.border.SoftBevelBorder", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
  216.       registerConstructor("javax.swing.border.TitledBorder", new String[]{"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"});
  217.       registerConstructor("javax.swing.plaf.BorderUIResource$TitledBorderUIResource", new String[]{"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"});
  218.       internalPersistenceDelegates.put("java.net.URI", new PrimitivePersistenceDelegate());
  219.       internalPersistenceDelegates.put("javax.swing.plaf.BorderUIResource$MatteBorderUIResource", new javax_swing_border_MatteBorder_PersistenceDelegate());
  220.       removeProperty("java.awt.geom.RectangularShape", "frame");
  221.       removeProperty("java.awt.Rectangle", "bounds");
  222.       removeProperty("java.awt.Dimension", "size");
  223.       removeProperty("java.awt.Point", "location");
  224.       removeProperty("java.awt.Component", "foreground");
  225.       removeProperty("java.awt.Component", "background");
  226.       removeProperty("java.awt.Component", "font");
  227.       removeProperty("java.awt.Component", "visible");
  228.       removeProperty("java.awt.ScrollPane", "scrollPosition");
  229.       removeProperty("java.awt.im.InputContext", "compositionEnabled");
  230.       removeProperty("javax.swing.JComponent", "minimumSize");
  231.       removeProperty("javax.swing.JComponent", "preferredSize");
  232.       removeProperty("javax.swing.JComponent", "maximumSize");
  233.       removeProperty("javax.swing.ImageIcon", "image");
  234.       removeProperty("javax.swing.ImageIcon", "imageObserver");
  235.       removeProperty("javax.swing.JMenu", "accelerator");
  236.       removeProperty("javax.swing.JMenuItem", "accelerator");
  237.       removeProperty("javax.swing.JMenuBar", "helpMenu");
  238.       removeProperty("javax.swing.JScrollPane", "verticalScrollBar");
  239.       removeProperty("javax.swing.JScrollPane", "horizontalScrollBar");
  240.       removeProperty("javax.swing.JScrollPane", "rowHeader");
  241.       removeProperty("javax.swing.JScrollPane", "columnHeader");
  242.       removeProperty("javax.swing.JViewport", "extentSize");
  243.       removeProperty("javax.swing.table.JTableHeader", "defaultRenderer");
  244.       removeProperty("javax.swing.JList", "cellRenderer");
  245.       removeProperty("javax.swing.JList", "selectedIndices");
  246.       removeProperty("javax.swing.DefaultListSelectionModel", "leadSelectionIndex");
  247.       removeProperty("javax.swing.DefaultListSelectionModel", "anchorSelectionIndex");
  248.       removeProperty("javax.swing.JComboBox", "selectedIndex");
  249.       removeProperty("javax.swing.JTabbedPane", "selectedIndex");
  250.       removeProperty("javax.swing.JTabbedPane", "selectedComponent");
  251.       removeProperty("javax.swing.AbstractButton", "disabledIcon");
  252.       removeProperty("javax.swing.JLabel", "disabledIcon");
  253.       removeProperty("javax.swing.text.JTextComponent", "caret");
  254.       removeProperty("javax.swing.text.JTextComponent", "caretPosition");
  255.       removeProperty("javax.swing.text.JTextComponent", "selectionStart");
  256.       removeProperty("javax.swing.text.JTextComponent", "selectionEnd");
  257.    }
  258. }
  259.